Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра САПР
ЗВІТ
про виконання лабораторної роботи №3
на тему: «Індексно-послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях»
з курсу: «Організація баз даних і знань»
Львів 2008
Тема роботи
Індексно-послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях.
Мета роботи
Розглянути органiзацiю i ведення файлiв iндексно-послiдовного доступу; набути практичнi навички у програмуваннi алгоритмiв iндексно-послiдовного доступу до файлiв на зовнiшнiх запам'ятовуючих пристроях.
Лабораторне завдання
Тема завдання: Персонал школи
1. Написати програму, яка реалiзує алгоритми роботи iндексно-послiдов ного методу доступу до iнформацiї на зовнiшнiх носiях:
1.1. Пошук елемента даних за введеним ключем.
1.2. Вставка елемента даних.
1.3. Видалення елемента даних.
1.4. Модифiкацiя елемента даних.
Короткі теоретичні відомості
Текст програми
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct DB
{
int id;
char name[12];
char lname[9];
char pname[13];
char datan[11];
char posada[10];
char tel[9];
float zarplata;
};
struct DB db1,db2;
FILE *f1,*fi;
char fn[50]="db3.txt",fn2[50]="index.txt";
int h(int param)
{
int k,mod1;
fi=fopen(fn2,"r");
while(!feof(fi))
{
fscanf(fi,"%d",&k);
if(param<k) break;
}
if(!feof(fi))
{
fclose(fi);
mod1=(param%10)*sizeof(struct DB);
return (k-10)*sizeof(struct DB)+mod1;
}
return 0;
}
void insert()
{
int hesh;
printf("Uvedit ID (0 dla zaverszennia vvodu)\nІ ");
scanf("%d", &db1.id);
while (db1.id!=0)
{
hesh=h(db1.id);
fseek(f1,hesh, SEEK_SET);
fread(&db2, sizeof(struct DB),1,f1);
if(db2.id==db1.id)
{
printf("\n***ERROR:Zapus z ID %d vze isnuje!!\nVvedit inshyj ID\n",db1.id);
goto error;
}
fseek(f1, hesh, SEEK_SET);
printf("Uvedit'\nPrizvyshche(11), Imja(8), Po-bat'kovi(12), d/n(10), posadu(9), telefon(8), zarplatu\n");
scanf("%s%s%s%s%s%s%f", db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
fwrite(&db1, sizeof(struct DB), 1, f1);
printf("***Zapys dodano***\n");
error:
printf("Uvedit' ID\nІ ");
scanf("%d", &db1.id);
}
}
void ins2()
{
int hesh=0,i;
fseek(f1,0, SEEK_SET);
fwrite(&db2, sizeof(struct DB),1,f1);
for(i=0;i<100;i++)
{
hesh=hesh+sizeof(struct DB);
fseek(f1, hesh, SEEK_SET);
fwrite(&db2, sizeof(struct DB),1,f1);
}
}
void vyvid()
{
int i,j=0,k=0,l=0;
clrscr();
fseek(f1,0, SEEK_SET);
fread(&db2,sizeof(struct DB),1,f1);
for(i=1;i<=100;i++)
{
if (k==0)
{
getch();
clrscr();
printf(" єBLOK N%dє\n",j);
printf("ЙННННЛНННННННННННЛННННННННЛНННННННННКННЛННННКНННННЛНННННННННЛННННННННЛННННННННН»");
printf("є IDєPRIZVYSHCHEєIMJA єPO-BAT'KOVI єDATA NAR. єPOSADA єTELEFON єZARPLATA є");
printf("МННННОНННННННННННОННННННННОННННННННННННОННННННННННОНННННННННОННННННННОННННННННН№");
}
printf("є%4dє%-11sє%-8sє%-12sє%-10sє%-9sє%-8sє%9.2fє",db2.id, db2.name, db2.lname, db2.pname, db2.datan, db2.posada, db2.tel, db2.zarplata);
if(l<9)
printf("ЗДДДДЧДДДДДДДДДДДЧДДДДДДДДЧДДДДДДДДДДДДЧДДДДДДДДДДЧДДДДДДДДДЧДДДДДДДДЧДДДДДДДДД¶");
fseek(f1,i*sizeof(struct DB), SEEK_SET);
fread(&db2,sizeof(struct DB),1,f1);
k=i%10;
j=i/10;
l++;
if(l==10)
{
printf("ИННННКНННННННННННКННННННННКННННННННННННКННННННННННКНННННННННКННННННННКНННННННННј");
l=0;
}
}
getch();
}
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
void del()
{
struct DB db2={0, NULL, NULL, NULL, NULL, NULL, NULL, 0.00};
int hesh,id;
printf("Uvedit ID (0 dla zaverszennia vvodu)\nІ ");
scanf("%d", &id);
while (id>0)
{
hesh=h(id);
fseek(f1,hesh, SEEK_SET);
fread(&db1, sizeof(struct DB),1,f1);
// ...